package com.goodcol.plugin.service;

import com.goodcol.plugin.dto.GenerateOptions;
import com.goodcol.plugin.entity.GlobalConfigGroup;
import com.goodcol.plugin.entity.TableInfo;
import com.goodcol.plugin.entity.Template;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;

import java.util.Collection;
import java.util.List;

/**
 * 代码生成服务，Project级别Service
 *
 * @author QuickCode
 * @version 1.0.0
 */
public interface CodeGenerateService {
    /**
     * 获取实例对象
     *
     * @param project 项目对象
     * @return 实例对象
     */
    static CodeGenerateService getInstance(@NotNull Project project) {
        return project.getService(CodeGenerateService.class);
    }

    /**
     * 生成
     *
     * @param tableInfoList     需要生成代码的所有表信息
     * @param templates         模板
     * @param globalConfigGroup globalConfigGroup
     * @param generateOptions   生成选项
     */
    void generate(List<TableInfo> tableInfoList,
                  Collection<Template> templates, GlobalConfigGroup globalConfigGroup, GenerateOptions generateOptions);

    /**
     * 生成代码
     *
     * @param template          模板
     * @param globalConfigGroup globalConfigGroup
     * @param tableInfo         表信息对象
     * @return 生成好的代码
     */
    String generate(Template template, GlobalConfigGroup globalConfigGroup, TableInfo tableInfo);

    /**
     * 从事件选择数据库Table的事件中读取选中的表信息并缓存
     *
     * @param event event
     */
    boolean cacheSelectedTables(@NotNull AnActionEvent event);
}
